package com.steed.common.utils;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

@Slf4j
public class JacksonUtils {

    private static final XmlMapper xmlMapper    = new XmlMapper();

    private static final ObjectMapper objectMapper = new ObjectMapper();

    /**
     *
     * @param t 需要转化为XML格式字符串的实体类
     * @param <T> 入参类型
     * @return xml格式的字符串
     */
    public static <T> String toXml(T t){
        String result = null ;
        if(null != t){
            try {
                result = xmlMapper.writeValueAsString(t);
            } catch (Exception e) {
                log.error(e.getMessage(), e);
            }
        }
        return result;
    }

    /**
     *
     * @param s 字符串格式的XML内容
     * @param clazz 接收XML数据的实体类定义
     * @param <T> 接收XML数据的实体类
     * @return 指定实体类的实例
     */
    public static <T> T fromXml(String s, Class<T> clazz) {
        T t = null;
        if (StringUtils.isNoneBlank(s)) {
            try {
                t = xmlMapper.readValue(s, clazz);
            } catch (Exception e) {
                log.error(e.getMessage(), e);
            }
        }
        return t;
    }

    /**
     *
     * @param t T类型的对象
     * @param <T> 需要转化为String类型的实体类型
     * @return Json格式的字符串
     */
    public static <T> String toJson(T t) {
        String s = null;
        if (null != t) {
            try {
                s = objectMapper.writeValueAsString(t);
            } catch (Exception e) {
                log.error(e.getMessage(), e);
            }
        }
        return s;
    }
}
